package mundial.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import mundial.excepcion.DAOExcepcion;
import mundial.modelo.Jugador;
import mundial.util.ConexionBD;
import mundial.excepcion.LoginExcepcion;

public class JugadorDAO {

    public Jugador obtenerPorIdUsuario(String idUsuario) throws DAOExcepcion {
        String query = "select id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado " + " from usuario where id_usuario=?";
        Jugador vo = new Jugador();
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setString(1, idUsuario);
            rs = stmt.executeQuery();
            if (rs.next()) {
                vo.setId_jugador(rs.getString("id_usuario"));
                vo.setId_pais(rs.getString("clave"));
                vo.setNombre_ju(rs.getString("nombres"));
                vo.setPaterno_ju(rs.getString("paterno"));
                vo.setMaterno_ju(rs.getString("materno"));
                vo.setCorreo(rs.getString("correo"));
                vo.setDireccion(rs.getString("direccion"));
                vo.setTelefono(rs.getString("telefono"));
                vo.setEstado(rs.getString("estado"));
            }

        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return vo;
    }

    public Collection<Jugador> buscarPorNombre(String nombre)
            throws DAOExcepcion {
        //String query = "select id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado " + " from usuario where nombres like ?";
        String query = "select id_jugador,id_pais,nombre_ju,paterno_ju,materno_ju,sobrenombre_ju, edad_ju, talla_ju,posicion_ju, clubactual_ju " + "from jugador where nombre_ju like ?";
        Collection<Jugador> c = new ArrayList<Jugador>();
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setString(1, "%" + nombre + "%");
            rs = stmt.executeQuery();
            while (rs.next()) {
                Jugador vo = new Jugador();

                vo.setId_jugador(rs.getString("idjugador"));
                vo.setId_pais(rs.getString("idpais"));
                vo.setNombre_ju(rs.getString("nombres"));
                vo.setPaterno_ju(rs.getString("paterno"));
                vo.setMaterno_ju(rs.getString("materno"));
                vo.setEdad_ju(rs.getString("edad"));
                vo.setPosicion_ju(rs.getString("posicion"));

                c.add(vo);


            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return c;
    }

    public Jugador insertar(Jugador vo) throws DAOExcepcion {
        String query = "INSERT INTO jugador (id_jugador,id_pais,nombre_ju,paterno_ju,materno_ju,sobrenombre_ju, edad_ju, talla_ju, posicion_ju, clubactual_ju) " + "VALUES (?,?,?,?,?,?,?,?,?,?)";
        System.err.println(query);
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);

            stmt.setString(1, vo.getId_jugador());
            stmt.setString(2, vo.getId_pais());
            stmt.setString(3, vo.getNombre_ju());
            stmt.setString(4, vo.getPaterno_ju());
            stmt.setString(5, vo.getMaterno_ju());
            stmt.setString(6, vo.getSobrenombre_ju());
            stmt.setString(7, vo.getEdad_ju());
            stmt.setString(8, vo.getTalla_ju());
            stmt.setString(9, vo.getPosicion_ju());
            stmt.setString(10, vo.getClubactual_ju());

            int i = stmt.executeUpdate();
            if (i != 1) {
                throw new SQLException("No se pudo insertar");
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return vo;
    }

    public Jugador actualizar(Jugador vo) throws DAOExcepcion {
        String query = "UPDATE jugador SET id_pais=?, nombre_ju=?, paterno_ju=?, materno_ju=?,sobrenombre_ju=?, edad_ju=?, talla_ju=?, posicion_ju=, clubactual_ju=? WHERE id_jugador=?";
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setString(1, vo.getId_jugador());
            stmt.setString(2, vo.getId_pais());
            stmt.setString(3, vo.getNombre_ju());
            stmt.setString(4, vo.getPaterno_ju());
            stmt.setString(5, vo.getMaterno_ju());
            stmt.setString(6, vo.getSobrenombre_ju());
            stmt.setString(7, vo.getEdad_ju());
            stmt.setString(8, vo.getTalla_ju());
            stmt.setString(9, vo.getPosicion_ju());
            stmt.setString(9, vo.getClubactual_ju());

            int i = stmt.executeUpdate();
            if (i != 1) {
                throw new SQLException("No se pudo actualizar");
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return vo;
    }

    public void eliminar(String idjugador) throws DAOExcepcion {
        String query = "DELETE FROM jugador WHERE id_jugador=?";
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setString(1, idjugador);
            int i = stmt.executeUpdate();
            if (i != 1) {
                throw new SQLException("No se pudo eliminar");
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
    }

    public Collection<Jugador> listarTodos() throws DAOExcepcion {
        //String query = "select id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado" + " from usuario";
        String query = "select id_jugador,id_pais,nombre_ju,paterno_ju,materno_ju,edad_ju,posicion_ju" + "from jugador";
        Collection<Jugador> c = new ArrayList<Jugador>();
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            rs = stmt.executeQuery();
            while (rs.next()) {
                Jugador vo = new Jugador();


                vo.setId_jugador(rs.getString("idjugador"));
                vo.setId_pais(rs.getString("idpais"));
                vo.setNombre_ju(rs.getString("nombres"));
                vo.setPaterno_ju(rs.getString("paterno"));
                vo.setMaterno_ju(rs.getString("materno"));
                vo.setSobrenombre_ju(rs.getString("sobrenombre);
                vo.setEdad_ju(rs.getString("edad"));
                vo.setTalla_ju(rs.getString("talla"));
                vo.setPosicion_ju(rs.getString("posicion"));
                vo.setClubactual_ju(rs.getString("club"));
                c.add(vo);



            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return c;
    }

    public Jugador validar(String idUsuario, String clave)
            throws DAOExcepcion, LoginExcepcion {
        String query = "select id_jugador, nombres, paterno," + "materno, correo, direccion, telefono," + "estado from usuario where id_usuario=? and clave=?";
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Jugador vo = new Jugador();
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setString(1, idUsuario);
            stmt.setString(2, clave);
            rs = stmt.executeQuery();

            if (rs.next()) {


                vo.setId_jugador(rs.getString("idjugador"));
                vo.setId_pais(rs.getString("idpais"));
                vo.setNombre_ju(rs.getString("nombres"));
                vo.setPaterno_ju(rs.getString("paterno"));
                vo.setMaterno_ju(rs.getString("materno"));
                vo.setSobrenombre_ju(rs.getString("sobrenombre"));
                vo.setEdad_ju(rs.getString("edad"));
                vo.setTalla_ju(rs.getString("talla"));
                vo.setPosicion_ju(rs.getString("posicion"));
                vo.setClubactual_ju(rs.getString("club"));


            } else {
                throw new LoginExcepcion("No existe");
            }
        } catch (LoginExcepcion e) {
            System.err.println(e.getMessage());
            throw new LoginExcepcion(e.getMessage());
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return vo;
    }
}
